# 1级
# 问题:编写一个可以计算给定数的阶乘的程序。结果应该以逗号分隔的顺序打印在一行上。假设向程序提供以下输入:8
# 则输出为:40320
# 提示:在为问题提供输入数据的情况下，应该假设它是控制台输入。

# Num = int(input('Input Number:'))
# result = 1
# if Num == 0:
#     result = 1
# else :
#     for i in range(1, Num+1):
#         result = result * i

# print(result)

# https://blog.csdn.net/weixin_40547993/article/details/88928075
# 网站写法使用了定义函数的写法,使用了递归的思路写

# def fact(x):
#     if x == 0:
#         return 1
#     return x * fact(x-1)
# print('请输入一个数字:')
# x = int(input())
# print(fact(x))


# 使用尾递归优化
# def fact2(x, result):
#     if x == 1:
#         return result
#     result = result*x
#     return fact2(x-1, result)

# def fact(x):
#     if x == 0:
#         return 1
#     return fact2(x, 1)

# print('请输入一个数字:')
# x = int(input())
# print(fact(x))


# 使用尾递归优化2
def fact(x, result=1):
    if x == 0:
        return 1
    if x == 1:
        return result
    result = result*x
    return fact(x-1, result)

print('请输入一个数字:')
x = int(input())
print(fact(x))